package main

import "strings"

// 219. 存在重复元素 II https://leetcode.cn/problems/contains-duplicate-ii
// 人家的算法太巧妙了 tmd
func containsNearbyDuplicate(nums []int, k int) bool {
	cache := map[int]int{}
	for i, v := range nums {
		if _, ok := cache[v]; ok {
			return true
		}
		if len(cache) == k {
			delete(cache, nums[i-k])
		}
		cache[v] = i
	}
	return false
}

// 290. 单词规律 https://leetcode.cn/problems/word-pattern/
// 两个map 两个map 互相验证
// 这种题都不能一次过 TMD
// 这种题都不能一次过 TMD
// 这种题都不能一次过 TMD
func wordPattern(pattern string, s string) bool {
	wordList := strings.Split(s, " ")
	pByte := []byte(pattern)

	if len(pByte) != len(wordList) {
		return false
	}

	bToW := map[byte]string{}
	wToB := map[string]byte{}

	for i, w := range wordList {
		b := pByte[i]

		if b1, ok := wToB[w]; ok {
			if b1 != b {
				return false
			}
		} else {
			wToB[w] = b
		}

		if w1, ok := bToW[b]; ok {
			if w1 != w {
				return false
			}
		} else {
			bToW[b] = w
		}
	}
	return true
}
